package control.server;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

import model.beans.PessoaJB;
import model.dao.PessoaDAO;
import exceptions.ControlException;
import exceptions.DaoException;

public class UsuarioControl {

	private PessoaDAO pessoaDAO = new PessoaDAO();

	public UsuarioControl() throws DaoException {
		super();

		pessoaDAO = new PessoaDAO();
	}

	public void insert(PessoaJB pessoa) throws ControlException {

		PessoaDAO pessoaDAO = null;
		Connection conn = null;

		try {
			conn = new PessoaDAO().getConnection();
			conn.setAutoCommit(false);

			pessoa.setCodigo(pessoaDAO.insert(conn, pessoa));
			new PessoaDAO().insert(conn, pessoa);

			conn.commit();
		} catch (Exception e) {

			try {
				if (conn != null && !conn.isClosed())
					conn.rollback();
			} catch (SQLException e1) {
				throw new ControlException(e1.getMessage());
			}
			e.printStackTrace();
		} finally {

			try {
				if (conn != null)
					conn.close();
			} catch (Exception e) {
				throw new ControlException(e.getMessage());
			}

			conn = null;
			pessoaDAO = null;
		}
	}

	public void delete(PessoaJB pessoa) throws ControlException {

		PessoaDAO pessoaDAO = null;
		Connection conn = null;
		int icod = pessoa.getCodigo();

		try {
			pessoaDAO = new PessoaDAO();

			conn = pessoaDAO.getConnection();
			conn.setAutoCommit(false);

			pessoaDAO.delete(icod);

			conn.commit();
		} catch (Throwable e) {

			try {
				if (conn != null && !conn.isClosed())
					conn.rollback();
			} catch (SQLException e1) {
				throw new ControlException(e1.getMessage());
			}
			e.printStackTrace();
		} finally {

			try {
				if (conn != null)
					conn.close();
			} catch (Exception e) {
				throw new ControlException(e.getMessage());

			}

		}
	}

	public void update(PessoaJB pessoa) throws ControlException {

		PessoaDAO pessoaDAO = null;
		Connection conn = null;

		try {
			pessoaDAO = new PessoaDAO();

			conn = pessoaDAO.getConnection();
			conn.setAutoCommit(false);

			pessoaDAO.update(conn, pessoa);

			conn.commit();
		} catch (Throwable e) {

			try {
				if (conn != null && !conn.isClosed())
					conn.rollback();
			} catch (SQLException e1) {
				throw new ControlException(e1.getMessage());
			}
			e.printStackTrace();
		} finally {

			try {
				if (conn != null)
					conn.close();
			} catch (Exception e) {
				throw new ControlException(e.getMessage());

			}

		}
	}

	public PessoaJB findById(int id) throws Exception {

		return pessoaDAO.findById(id);

	}

	public ArrayList<PessoaJB> selectAll() throws Exception {

		return new PessoaDAO().selectAll();
	}

	public PessoaJB findByNome(String nome) throws Exception {
		return pessoaDAO.findByNome(nome);

	}

}
